package br.com.sisat.persistencia.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.sisat.modelo.ConsultaDTO;
import br.com.sisat.modelo.EspecialidadeDTO;
import br.com.sisat.modelo.PacienteDTO;
import br.com.sisat.modelo.ProntuarioDTO;
import br.com.sisat.persistencia.conexao.ConnectionProvider;
import br.com.sisat.util.ObjectUtil;

public class ProntuarioDAO {

	private static ProntuarioDAO dao;
	
	public static ProntuarioDAO getInstance(){
		if(ObjectUtil.isEmpty(dao)){
			dao = new ProntuarioDAO();
		}
		return dao;
	}

	public void executarIncluir(ProntuarioDTO prontuarioDTO) throws Exception {
		String sql = "INSERT INTO sat.prontuario" +
				"(id_pessoa, id_especialidade, id_terapeuta, altura, peso, imc, diagnostico, dtconsulta) " +
				"VALUES (?, ?, ?, ?, ?, ?,?, ?);";
		Connection conn = ConnectionProvider.getDefaultConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		int index = 1;
		ps.setLong 		(index++, prontuarioDTO.getPacienteDTO().getIdPessoa());
		ps.setLong 		(index++, prontuarioDTO.getNuEspecialidade());
		ps.setLong 		(index++, prontuarioDTO.getNuTerapeuta());
		ps.setBigDecimal(index++, prontuarioDTO.getAltura());
		ps.setBigDecimal(index++, prontuarioDTO.getPeso());
		ps.setBigDecimal(index++, prontuarioDTO.getImc());
		ps.setString    (index++, prontuarioDTO.getDiagnostico());
		ps.setDate      (index++, prontuarioDTO.getDtConsulta());
		ps.executeUpdate();
		conn.commit();
	}

	public List<ProntuarioDTO> recuperarProntuarios(ProntuarioDTO prontuarioDTO) throws Exception {
		List<ProntuarioDTO> lista = new ArrayList<ProntuarioDTO>();
		String sql = "SELECT id_especialidade, id_terapeuta, altura, peso, imc, diagnostico, dtconsulta " +
				     "FROM sat.prontuario where id_pessoa =" + prontuarioDTO.getPacienteDTO().getIdPessoa();
		Connection conn = ConnectionProvider.getDefaultConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			ProntuarioDTO prontuario = new ProntuarioDTO();
			prontuario.setNuEspecialidade(rs.getLong("id_especialidade"));
			prontuario.setNuTerapeuta(rs.getLong("id_terapeuta"));
			prontuario.setAltura(rs.getBigDecimal("altura"));
			prontuario.setPeso(rs.getBigDecimal("peso"));
			prontuario.setImc(rs.getBigDecimal("imc"));
			prontuario.setDiagnostico(rs.getString("diagnostico"));
			prontuario.setDtConsulta(rs.getDate("dtconsulta"));
			lista.add(prontuario);
		}
		conn.close();
		return lista;
	}
	
	public List<EspecialidadeDTO> recuperarEspecialidades() throws Exception {
		List<EspecialidadeDTO> especialidades = new ArrayList<EspecialidadeDTO>();
		String sql = " SELECT id_especialidade, nome FROM sat.especialidade order by id_especialidade;";
		Connection conn = ConnectionProvider.getDefaultConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			EspecialidadeDTO especialidade = new EspecialidadeDTO();
			especialidade.setIdEspecialidade(rs.getLong("id_especialidade"));
			especialidade.setNoEspecialidade(rs.getString("nome"));
			especialidades.add(especialidade);
		}
		conn.close();
		return especialidades;
	}

	public Long recuperarConsulta(PacienteDTO pacienteDTO, Long statusAntigo) throws Exception {
		Long idConsulta = null;
		String sql = " SELECT id_consulta FROM sat.consulta where nu_status = " + statusAntigo + ";";
		Connection conn = ConnectionProvider.getDefaultConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			idConsulta = rs.getLong("id_consulta");
		}
		conn.close();
		return idConsulta;
	}

	public void atualizaStatus(Long idConsulta, Long nuStatus) throws Exception {
		String sql = "UPDATE sat.consulta SET nu_status = ? WHERE id_consulta = " + idConsulta;
		Connection conn = ConnectionProvider.getDefaultConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		int index = 1;
		ps.setLong(index++, nuStatus);
		ps.executeUpdate();
		conn.commit();
		ps.close();
		
	}
	
}
